home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2000 #4
/
Amiga Plus CD - 2000 - No. 4.iso
/
Tools
/
Misc
/
bgui
/
Examples
/
Source
/
LayoutGroupDemo.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-05-09
|
8KB
|
325 lines
/*
* @(#) $Header: /cvsroot/bgui/gadgets/LayoutGroup/LayoutGroupDemo.c,v 41.11 2000/05/09 20:34:44 mlemos Exp $
*
* BGUI library
*
* (C) Copyright 2000 BGUI Developers Team.
* (C) Copyright 1998 Manuel Lemos.
* All Rights Reserved.
*
* $Log: LayoutGroupDemo.c,v $
* Revision 41.11 2000/05/09 20:34:44 mlemos
* Bumped to revision 41.11
*
* Revision 1.2 2000/05/09 19:59:47 mlemos
* Merged with the branch Manuel_Lemos_fixes.
*
* Revision 1.1.2.2 2000/05/05 18:08:02 mlemos
* Changed the positions, spans and weights of tree nodes and arrows to make
* them layout cleaner.
*
* Revision 1.1.2.1 2000/05/04 05:08:39 mlemos
* Initial revision.
*
*
*/
#include <libraries/bgui.h>
#include <libraries/bgui_macros.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/bgui.h>
#include <clib/alib_protos.h>
#include <bgui/bgui_layoutgroup.h>
/*
* Output file handle and BGUI
* library base.
*/
BPTR StdOut;
struct Library *BGUIBase;
VOID Tell( UBYTE *fstr, ... )
{
if ( StdOut ) VFPrintf( StdOut, fstr, ( ULONG * )&fstr + 1 );
}
STATIC struct VectorItem left_down_arrow[] = {
{ 20, 20, VIF_SCALE },
{ 19, 0, VIF_MOVE | VIF_AREASTART },
{ 1, 18, VIF_DRAW },
{ 0, 16, VIF_DRAW },
{ 0, 20, VIF_DRAW },
{ 4, 20, VIF_DRAW },
{ 2, 19, VIF_DRAW },
{ 20, 1, VIF_DRAW },
{ 20, 0, VIF_DRAW },
{ 19, 0, VIF_AREAEND | VIF_LASTITEM },
};
STATIC struct VectorItem right_down_arrow[] = {
{ 40, 40, VIF_SCALE },
{ 2, 0, VIF_MOVE | VIF_AREASTART },
{ 38, 36, VIF_DRAW },
{ 40, 32, VIF_DRAW },
{ 40, 40, VIF_DRAW },
{ 32, 40, VIF_DRAW },
{ 36, 38, VIF_DRAW },
{ 0, 2, VIF_DRAW },
{ 0, 0, VIF_DRAW },
{ 2, 0, VIF_AREAEND | VIF_LASTITEM },
};
#define TreeNode(name,row,column) \
ButtonObject, \
LAB_Label, name, \
EndObject, \
LGNA_Row,row, \
LGNA_Column,column, \
LGNA_ColumnSpan,2, \
LGNA_VerticalWeight,0, \
LGNA_LeftWeight,0, \
LGNA_WidthWeight,1, \
LGNA_RightWeight,0, \
LGNA_TopOffset,1, \
LGNA_BottomOffset,1, \
LGNA_TopSpacing,1, \
LGNA_BottomSpacing,1
#define LeftArrow(row,column) \
ButtonObject, \
VIT_VectorArray, left_down_arrow, \
NoFrame, \
EndObject, \
LGNA_Row,row, \
LGNA_Column,column, \
LGNA_VerticalWeight,1, \
LGNA_LeftWeight,0, \
LGNA_WidthWeight,1, \
LGNA_RightWeight,0, \
LGNA_TopWeight,0, \
LGNA_HeightWeight,1, \
LGNA_BottomWeight,0, \
LGNA_TopOffset,0, \
LGNA_RightOffset,0, \
LGNA_BottomOffset,0, \
LGNA_TopSpacing,0, \
LGNA_RightSpacing,0, \
LGNA_BottomSpacing,0
#define RightArrow(row,column) \
ButtonObject, \
VIT_VectorArray, right_down_arrow, \
NoFrame, \
EndObject, \
LGNA_Row,row, \
LGNA_Column,column, \
LGNA_VerticalWeight,1, \
LGNA_LeftWeight,0, \
LGNA_WidthWeight,1, \
LGNA_RightWeight,0, \
LGNA_TopWeight,0, \
LGNA_HeightWeight,1, \
LGNA_BottomWeight,0, \
LGNA_LeftOffset,0, \
LGNA_TopOffset,0, \
LGNA_BottomOffset,0, \
LGNA_LeftSpacing,0, \
LGNA_TopSpacing,0, \
LGNA_BottomSpacing,0
static Object *OpenMainWindow(struct MsgPort *SharedPort,struct Window **main)
{
Object *object=NULL;
/*
** Not created yet? Create it now!
**/
if ( ! object ) {
object = WindowObject,
WINDOW_Title, "BGUI Layout Group demo",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_AutoAspect, TRUE,
WINDOW_SharedPort, SharedPort,
WINDOW_MasterGroup,
BGUI_NewObject(BGUI_LAYOUTGROUP_GADGET,
LGA_LayoutType,LGT_TABLE,
FRM_Title,"Laying gadgets in a tree using the table layout",
NeXTFrame,
StartMember,
TreeNode("Root node",0,2),
EndMember,
StartMember,
LeftArrow(1,2),
EndMember,
StartMember,
RightArrow(1,3),
EndMember,
StartMember,
TreeNode("Left branch",2,1),
EndMember,
StartMember,
TreeNode("Right branch",2,3),
EndMember,
StartMember,
LeftArrow(3,1),
EndMember,
StartMember,
RightArrow(3,2),
EndMember,
StartMember,
LeftArrow(3,3),
EndMember,
StartMember,
RightArrow(3,4),
EndMember,
StartMember,
TreeNode("Left leaf",4,0),
EndMember,
StartMember,
TreeNode("Middle leaf",4,2),
EndMember,
StartMember,
TreeNode("Right leaf",4,4),
EndMember,
TAG_END),
EndObject;
}
/*
** Object OK?
**/
if ( object ) {
/*
** Open window.
**/
if((*main=WindowOpen( object ))==NULL)
{
DisposeObject(object);
object=NULL;
}
}
return( object );
}
static VOID StartDemo(void)
{
Object *WA_Main;
struct MsgPort *SharedPort;
ULONG sigmask = 0L, sigrec,rc;
struct Window *main=NULL, *sigwin;
BOOL running = TRUE;
/*
** Create the shared message port.
**/
if ( SharedPort = CreateMsgPort()) {
/*
** Open the main window.
**/
if ( WA_Main = OpenMainWindow(SharedPort,&main)) {
/*
** OR signal masks.
**/
sigmask |= ( 1L << SharedPort->mp_SigBit );
/*
** Loop...
**/
do {
/*
** Wait for the signals to come.
**/
sigrec = Wait( sigmask );
/*
** Find out the which window signalled us.
**/
if ( sigrec & ( 1 << SharedPort->mp_SigBit )) {
while ( sigwin = GetSignalWindow( WA_Main )) {
/*
** Main window signal?
**/
if ( sigwin == main ) {
/*
** Call the main-window event handler.
**/
while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
running = FALSE;
break;
}
}
}
}
}
} while ( running );
}
/*
** Dispose of all window objects.
**/
if (WA_Main) DisposeObject(WA_Main);
/*
** Delete the shared message port.
**/
DeleteMsgPort( SharedPort );
} else
Tell( "Unable to create a message port.\n" );
}
/*
* Main entry point.
*/
int main( int argc, char **argv )
{
struct Process *this_task = ( struct Process * )FindTask( NULL );
BOOL is_wb = FALSE;
if ( this_task->pr_CLI )
/*
* Started from the CLI. Simply pickup
* the CLI output handle.
*/
StdOut = Output();
else {
/*
* Workbench startup. Open a console
* for output.
*/
StdOut = Open( "CON:10/10/500/100/BGUI Demo Output/WAIT/AUTO", MODE_NEWFILE );
is_wb = TRUE;
}
/*
* Open BGUI.
*/
if ( BGUIBase = OpenLibrary( BGUINAME, BGUIVERSION )) {
/*
* Run the demo.
*/
StartDemo();
CloseLibrary( BGUIBase );
} else
Tell( "Unable to open %s version %ld\n", BGUINAME, BGUIVERSION );
/*
* Close console if ran from
* the workbench.
*/
if ( is_wb ) {
if ( StdOut ) Close( StdOut );
}
return( 0 );
}